package com.xnew.utils;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MessageClient {
    private String serviceURL ;//= "http://115.182.203.188:8060/webservice.asmx";
    private String sn ;//= "DXX-BBX-12P-11576";// 序列号
    private String password ;//= "364418";
    private String pwd = "";// 密码

    /*
     * 构造函数
     */
    public MessageClient(String serviceURL,String sn,String password) throws UnsupportedEncodingException {
        //System.out.println("MessageClient(serviceURL:" + serviceURL + ";sn:" + sn + ";password:" + password + ")");
        this.serviceURL = serviceURL;
        this.sn = sn;
        this.password = password;
        //密码为md5(sn+password)
        this.pwd = this.getMD5(sn + password);
        //System.out.println("pwd:" + pwd);
    }

    /*
     * 方法名称：getMD5
     * 功    能：字符串MD5加密
     * 参    数：待转换字符串
     * 返 回 值：加密之后字符串
     */
    public String getMD5(String sourceStr) throws UnsupportedEncodingException {
        String resultStr = "";
        try {
            byte[] temp = sourceStr.getBytes();
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(temp);
            // resultStr = new String(md5.digest());
            byte[] b = md5.digest();
            for (int i = 0; i < b.length; i++) {
                char[] digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8',
                        '9', 'A', 'B', 'C', 'D', 'E', 'F' };
                char[] ob = new char[2];
                ob[0] = digit[(b[i] >>> 4) & 0X0F];
                ob[1] = digit[b[i] & 0X0F];
                resultStr += new String(ob);
            }
            return resultStr;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }

    /*
     * 方法名称：register
     * 功    能：注册
     * 参    数：对应参数 省份，城市，行业，企业名称，联系人，电话，手机，电子邮箱，传真，地址，邮编
     * 返 回 值：注册结果（String）
     */
    public String register(String province, String city, String trade,
                           String entname, String linkman, String phone, String mobile,
                           String email, String fax, String address, String postcode) {
        String result = "";
        String soapAction = "http://tempuri.org/Register";
        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        xml += "<soap12:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://www.w3.org/2003/05/soap-envelope\">";
        xml += "<soap12:Body>";
        xml += "<Register xmlns=\"http://tempuri.org/\">";
        xml += "<sn>" + sn + "</sn>";
        xml += "<pwd>" + password + "</pwd>";
        xml += "<province>" + province + "</province>";
        xml += "<city>" + city + "</city>";
        xml += "<trade>" + trade + "</trade>";
        xml += "<entname>" + entname + "</entname>";
        xml += "<linkman>" + linkman + "</linkman>";
        xml += "<phone>" + phone + "</phone>";
        xml += "<mobile>" + mobile + "</mobile>";
        xml += "<email>" + email + "</email>";
        xml += "<fax>" + fax + "</fax>";
        xml += "<address>" + address + "</address>";
        xml += "<postcode>" + postcode + "</postcode>";
        xml += "</Register>";
        xml += "</soap12:Body>";
        xml += "</soap12:Envelope>";

        URL url;
        try {
            url = new URL(serviceURL);

            URLConnection connection = url.openConnection();
            HttpURLConnection httpconn = (HttpURLConnection) connection;
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            bout.write(xml.getBytes("GBK"));
            byte[] b = bout.toByteArray();
            httpconn.setRequestProperty("Content-Length", String
                    .valueOf(b.length));
            httpconn.setRequestProperty("Content-Type",
                    "text/xml; charset=gb2312");
            httpconn.setRequestProperty("SOAPAction", soapAction);
            httpconn.setRequestMethod("POST");
            httpconn.setDoInput(true);
            httpconn.setDoOutput(true);

            OutputStream out = httpconn.getOutputStream();
            out.write(b);
            out.close();

            InputStreamReader isr = new InputStreamReader(httpconn
                    .getInputStream());
            BufferedReader in = new BufferedReader(isr);
            String inputLine;
            while (null != (inputLine = in.readLine())) {
                Pattern pattern = Pattern
                        .compile("<RegisterResult>(.*)</RegisterResult>");
                Matcher matcher = pattern.matcher(inputLine);
                while (matcher.find()) {
                    result = matcher.group(1);
                }
            }
            in.close();
            return new String(result.getBytes(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
    /*
     * 方法名称：mt
     * 功    能：发送短信
     * 参    数：mobile,content,ext,stime,rrid(手机号，内容，扩展码，定时时间，唯一标识)
     * 返 回 值：唯一标识，如果不填写rrid将返回系统生成的
     */
    public String mt(String mobile, String content, String ext, String stime,
                     String rrid) {
        //System.out.println("mt (mobile:" + mobile + ";content:" + content + ")");
        String result = "";
        String soapAction = "http://tempuri.org/mt";
        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        xml += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
        xml += "<soap:Body>";
        xml += "<mt xmlns=\"http://tempuri.org/\">";
        xml += "<sn>" + sn + "</sn>";
        xml += "<pwd>" + pwd + "</pwd>";
        xml += "<mobile>" + mobile + "</mobile>";
        xml += "<content>" + content+"【中国证券业协会】" + "</content>";
        xml += "<ext>" + ext + "</ext>";
        xml += "<stime>" + stime + "</stime>";
        xml += "<rrid>" + rrid + "</rrid>";
        xml += "</mt>";
        xml += "</soap:Body>";
        xml += "</soap:Envelope>";
        //System.out.println("xml:" + xml);
        URL url;
        try {
            url = new URL(serviceURL);

            URLConnection connection = url.openConnection();
            HttpURLConnection httpconn = (HttpURLConnection) connection;
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            bout.write(xml.getBytes("GBK"));
            byte[] b = bout.toByteArray();
            httpconn.setRequestProperty("Content-Length", String
                    .valueOf(b.length));
            httpconn.setRequestProperty("Content-Type",
                    "text/xml; charset=gb2312");
            httpconn.setRequestProperty("SOAPAction", soapAction);
            httpconn.setRequestMethod("POST");
            httpconn.setDoInput(true);
            httpconn.setDoOutput(true);

            OutputStream out = httpconn.getOutputStream();
            out.write(b);
            out.close();
            //System.out.println(b.toString());
            InputStreamReader isr = new InputStreamReader(httpconn
                    .getInputStream());
            BufferedReader in = new BufferedReader(isr);
            String inputLine;
            while (null != (inputLine = in.readLine())) {
                Pattern pattern = Pattern.compile("<mtResult>(.*)</mtResult>");
                Matcher matcher = pattern.matcher(inputLine);
                //System.out.println(matcher.toString());
                while (matcher.find()) {
                    result = matcher.group(1);
                }
            }
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }


    /*
     * 方法名称：gxmt
     * 功    能：发送短信
     * 参    数：mobile,content,ext,stime,rrid(手机号，内容，扩展码，定时时间，唯一标识)
     * 返 回 值：唯一标识，如果不填写rrid将返回系统生成的
     */
    public String gxmt(String mobile, String content, String ext, String stime,
                       String rrid) {
        String result = "";
        String soapAction = "http://tempuri.org/gxmt";
        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        xml += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
        xml += "<soap:Body>";
        xml += "<gxmt xmlns=\"http://tempuri.org/\">";
        xml += "<sn>" + sn + "</sn>";
        xml += "<pwd>" + pwd + "</pwd>";
        xml += "<mobile>" + mobile + "</mobile>";
        xml += "<content>" + content + "</content>";
        xml += "<ext>" + ext + "</ext>";
        xml += "<stime>" + stime + "</stime>";
        xml += "<rrid>" + rrid + "</rrid>";
        xml += "</gxmt>";
        xml += "</soap:Body>";
        xml += "</soap:Envelope>";

        //System.out.println("xml:" + xml);
        URL url;
        try {
            url = new URL(serviceURL);

            URLConnection connection = url.openConnection();
            HttpURLConnection httpconn = (HttpURLConnection) connection;
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            bout.write(xml.getBytes("GBK"));
            byte[] b = bout.toByteArray();
            httpconn.setRequestProperty("Content-Length", String
                    .valueOf(b.length));
            httpconn.setRequestProperty("Content-Type",
                    "text/xml; charset=gb2312");
            httpconn.setRequestProperty("SOAPAction", soapAction);
            httpconn.setRequestMethod("POST");
            httpconn.setDoInput(true);
            httpconn.setDoOutput(true);

            OutputStream out = httpconn.getOutputStream();
            out.write(b);
            out.close();

            InputStreamReader isr = new InputStreamReader(httpconn
                    .getInputStream());
            BufferedReader in = new BufferedReader(isr);
            String inputLine;
            while (null != (inputLine = in.readLine())) {
                Pattern pattern = Pattern.compile("<gxmtResult>(.*)</gxmtResult>");
                Matcher matcher = pattern.matcher(inputLine);
                while (matcher.find()) {
                    result = matcher.group(1);
                }
            }
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }


    /*
     * 方法名称：mo
     * 功    能：接收短信
     * 参    数：无
     * 返 回 值：接收到的信息
     */
    public String mo() {
        String result = "";
        String soapAction = "http://tempuri.org/mo";
        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        xml += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
        xml += "<soap:Body>";
        xml += "<mo xmlns=\"http://tempuri.org/\">";
        xml += "<sn>" + sn + "</sn>";
        xml += "<pwd>" + pwd + "</pwd>";
        xml += "</mo>";
        xml += "</soap:Body>";
        xml += "</soap:Envelope>";

        URL url;
        try {
            url = new URL(serviceURL);

            URLConnection connection = url.openConnection();
            HttpURLConnection httpconn = (HttpURLConnection) connection;
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            bout.write(xml.getBytes("GBK"));
            byte[] b = bout.toByteArray();
            httpconn.setRequestProperty("Content-Length", String
                    .valueOf(b.length));
            httpconn.setRequestProperty("Content-Type",
                    "text/xml; charset=gb2312");
            httpconn.setRequestProperty("SOAPAction", soapAction);
            httpconn.setRequestMethod("POST");
            httpconn.setDoInput(true);
            httpconn.setDoOutput(true);

            OutputStream out = httpconn.getOutputStream();
            out.write(b);
            out.close();

            InputStream isr = httpconn.getInputStream();
            StringBuffer buff = new StringBuffer();
            byte[] byte_receive = new byte[10240];
            for (int i = 0; (i = isr.read(byte_receive)) != -1;) {
                buff.append(new String(byte_receive, 0, i));
            }
            isr.close();
            String result_before = buff.toString();
            int start = result_before.indexOf("<moResult>");
            int end = result_before.indexOf("</moResult>");
            result = result_before.substring(start + 10, end);

            return result;

        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    /*
     * 方法名称：msgid
     * 功    能：获取msgid（发送成功的最后100次）
     * 参    数：无
     * 返 回 值：msgid串
     */
    public String msgid() {
        String result = "";
        String soapAction = "http://tempuri.org/msgid";
        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        xml += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
        xml += "<soap:Body>";
        xml += "<msgid xmlns=\"http://tempuri.org/\">";
        xml += "<sn>" + sn + "</sn>";
        xml += "<pwd>" + pwd + "</pwd>";
        xml += "</msgid>";
        xml += "</soap:Body>";
        xml += "</soap:Envelope>";

        URL url;
        try {
            url = new URL(serviceURL);

            URLConnection connection = url.openConnection();
            HttpURLConnection httpconn = (HttpURLConnection) connection;
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            bout.write(xml.getBytes("GBK"));
            byte[] b = bout.toByteArray();
            httpconn.setRequestProperty("Content-Length", String
                    .valueOf(b.length));
            httpconn.setRequestProperty("Content-Type",
                    "text/xml; charset=gb2312");
            httpconn.setRequestProperty("SOAPAction", soapAction);
            httpconn.setRequestMethod("POST");
            httpconn.setDoInput(true);
            httpconn.setDoOutput(true);

            OutputStream out = httpconn.getOutputStream();
            out.write(b);
            out.close();

            InputStream isr = httpconn.getInputStream();
            StringBuffer buff = new StringBuffer();
            byte[] byte_receive = new byte[10240];
            for (int i = 0; (i = isr.read(byte_receive)) != -1;) {
                buff.append(new String(byte_receive, 0, i));
            }
            isr.close();
            String result_before = buff.toString();
            int start = result_before.indexOf("<msgidResult>");
            int end = result_before.indexOf("</msgidResult>");
            result = result_before.substring(start+13, end);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    /*
     * 方法名称：report
     * 功    能：获取短信回执
     * 参    数：最大ID（此地如有疑问请咨询工程师）
     * 返 回 值：短信回执信息
     */
    public String report(long maxid) {
        String result = "";
        String soapAction = "http://tempuri.org/report";
        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        xml += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
        xml += "<soap:Body>";
        xml += "<report xmlns=\"http://tempuri.org/\">";
        xml += "<sn>" + sn + "</sn>";
        xml += "<pwd>" + pwd + "</pwd>";
        xml += "<maxid>" + maxid + "</maxid>";
        xml += "</report>";
        xml += "</soap:Body>";
        xml += "</soap:Envelope>";

        URL url;
        try {
            url = new URL(serviceURL);

            URLConnection connection = url.openConnection();
            HttpURLConnection httpconn = (HttpURLConnection) connection;
            ByteArrayOutputStream bout = new ByteArrayOutputStream();
            bout.write(xml.getBytes("GBK"));
            byte[] b = bout.toByteArray();
            httpconn.setRequestProperty("Content-Length", String
                    .valueOf(b.length));
            httpconn.setRequestProperty("Content-Type",
                    "text/xml; charset=gb2312");
            httpconn.setRequestProperty("SOAPAction", soapAction);
            httpconn.setRequestMethod("POST");
            httpconn.setDoInput(true);
            httpconn.setDoOutput(true);

            OutputStream out = httpconn.getOutputStream();
            out.write(b);
            out.close();

            InputStream isr = httpconn.getInputStream();
            StringBuffer buff = new StringBuffer();
            byte[] byte_receive = new byte[10240];
            for (int i = 0; (i = isr.read(byte_receive)) != -1;) {
                buff.append(new String(byte_receive, 0, i));
            }
            isr.close();
            String result_before = buff.toString();
            int start = result_before.indexOf("<reportResult>");
            int end = result_before.indexOf("</reportResult>");
            result = result_before.substring(start+14, end);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
    public static void main(String[] args) throws UnsupportedEncodingException {
        try {
            String sn="DXX-BBX-12P-11576";//"SDK-TTS-010-XXXXX";
            String pwd="364418";
            String serviceURL = "http://115.182.203.188:8060/webservice.asmx";
            MessageClient client=new MessageClient(serviceURL,sn,pwd);
            String r = client.mt("13683378418", "周三名创日升级啦❗最高立减10元已发放至【会员中心】-【优惠券】里券可以在小程序使用，也可以去线下门店用！仅限今天噢～这个羊毛肯定要薅啊还不快来！", "", "", "");
            System.out.print(r);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
